package mx.frantor.catalogos.bussines;

import java.util.List;

import mx.frantor.catalogos.dao.EstatusDetallePedidoDAO;
import mx.frantor.catalogos.daoimp.EstatusDetallePedidoDAOImpl;
import mx.frantor.catalogos.entitys.EstatusDetallePedidoEntity;

public class EstatusDetallePedidoBussines {
	
	private EstatusDetallePedidoDAO estDetPedDAOImpl = new EstatusDetallePedidoDAOImpl();
	private MaquinariaBussines maqBuss = new MaquinariaBussines();
	
	public String agregarEstatusDetPed(Long idDetallePedido, Integer cantidad, String estatus, Long idMaquina, String encargado){
		EstatusDetallePedidoEntity nuevoEstatus = new EstatusDetallePedidoEntity();
		
		nuevoEstatus.setIdDetallePedido(idDetallePedido);
		nuevoEstatus.setCantidad(cantidad);
		nuevoEstatus.setEstatus(estatus);
		nuevoEstatus.setIdMaquina(idMaquina);
		nuevoEstatus.setEncargado(encargado);
		
		String res = estDetPedDAOImpl.agregarEstatus(nuevoEstatus);
		
		return res;
	}
	
	public String modificarEstatusDetPed(Long idEstatusDetallePedido, Long idDetallePedido, Integer cantidad, String estatus, Long idMaquina, String encargado){
		EstatusDetallePedidoEntity modificarEstatus = new EstatusDetallePedidoEntity();
		
		modificarEstatus.setIdEstatusDetallePedido(idEstatusDetallePedido);
		modificarEstatus.setIdDetallePedido(idDetallePedido);
		modificarEstatus.setCantidad(cantidad);
		modificarEstatus.setEstatus(estatus);
		modificarEstatus.setIdMaquina(idMaquina);
		modificarEstatus.setEncargado(encargado);
		
		String res = estDetPedDAOImpl.modificarEstatus(modificarEstatus);
		
		return res;
	}
	
	public String eliminarEstatusDetPed(long idestatusdetallepedido){
		
		String res = estDetPedDAOImpl.eliminarEstatus(idestatusdetallepedido);
		
		return res;
	}
	
	public List<EstatusDetallePedidoEntity> getTodosEstatusDetallePedidoActivos(){
		List<EstatusDetallePedidoEntity> lstEstatus = estDetPedDAOImpl.getTodosEstatusActivos();
		return lstEstatus;	
	}
	
	public EstatusDetallePedidoEntity getDetallePedido(long idEstatusDetallePedido){
		EstatusDetallePedidoEntity estatus = estDetPedDAOImpl.getEstatusId(idEstatusDetallePedido);
		return estatus;
	}
	
	public List<EstatusDetallePedidoEntity> getEstatusDetallePedidoActivo(long idEstatusDetallePedido){
		List<EstatusDetallePedidoEntity> lstEstatus = estDetPedDAOImpl.getEstatusPorId(idEstatusDetallePedido);
		return lstEstatus;	
	}
	
	public List<EstatusDetallePedidoEntity> getEstatusDetallePedidoPorIdDetPedido(long idDetallePedido){
		List<EstatusDetallePedidoEntity> lstEstatus = estDetPedDAOImpl.getEstatusPorIdDetallePedido(idDetallePedido);
		for(EstatusDetallePedidoEntity estatusE:lstEstatus){
			if(estatusE.getIdMaquina()!=null){
				estatusE.setClaveMaq(maqBuss.getMaquinariaId(estatusE.getIdMaquina()).getNombre());
			}else{
				estatusE.setClaveMaq("NA");
			}
		}
		return lstEstatus;	
	}

	public int eliminarEstatusDetPed(long idDetPed, String estatus) {
		// TODO Auto-generated method stub
		int res = estDetPedDAOImpl.eliminarEstatusDetener(idDetPed, estatus);
		
		return res;
	}
	
	public String cambiarEstatus(long idDetPed, Integer cantAnt, Integer cantAct, 
			String estatusAnt, String estatusAct, long idestatusdetallepedido, Long idMaquina, String encargado){
		System.out.println(idDetPed + "-" + cantAnt + "-" + cantAct + "-" + estatusAnt + "-" + estatusAct + 
				"-" + idestatusdetallepedido);
		//Consultar si ya existe el producto con ese estatus
		EstatusDetallePedidoEntity estDetEntity = new EstatusDetallePedidoEntity();
		EstatusDetallePedidoEntity modDetEntity = new EstatusDetallePedidoEntity();
		try{
			estDetEntity = getDetallePedidoEstatus(idDetPed,estatusAct);
			modDetEntity = getDetallePedido(idestatusdetallepedido);
			if(estDetEntity == null){
				//Si no existe se agrega uno nuevo
				agregarEstatusDetPed(idDetPed, cantAct, estatusAct, idMaquina, encargado);
				System.out.println("Llega agregar estatus");
			}else{
				//Si ya existe se modifica el registro
				estDetEntity.setCantidad(estDetEntity.getCantidad() + cantAct);
				estDetEntity.setIdMaquina(idMaquina);
				estDetEntity.setEncargado(encargado);
				estDetPedDAOImpl.modificarEstatus(estDetEntity);
				System.out.println("Llega modificar estatus");
			}
			if(cantAct-cantAnt == 0){
				//Si la cantidad a descontar del estatus es igual se elimina el registro
				eliminarEstatusDetPed(idestatusdetallepedido);
				System.out.println("Llega eliminar estatus");
			}else{
				//si no se descuenta la cantidad del estatus actual
				modDetEntity.setCantidad(modDetEntity.getCantidad() - cantAct);
				estDetPedDAOImpl.modificarEstatus(modDetEntity);
				System.out.println("Llega modificar estatus antiguo");
			}
			
		}catch(Exception x) {
			System.out.println("modificar EstatusDetallePedido resultado " + x.getMessage());
		}
		return null;
	}

	private EstatusDetallePedidoEntity getDetallePedidoEstatus(long idDetPed,
			String estatusAct) {
		
		EstatusDetallePedidoEntity estatus = estDetPedDAOImpl.getEstatusIdDetEstatus(idDetPed, estatusAct);
		return estatus;
	}

}
